package com.mastercard.assets.web.struts.actions;

import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.web.struts.forms.reporteOne;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class descargaReporte extends Action {
    
    public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
    {
        
        System.out.println( "Entra a generar reporte" ) ;
        
        reporteOne f = ( reporteOne ) form ;
        
        System.out.println( "DAtos::: " + f.getNumPaisesT( ) + " ----- " + f.getNumPaisesT( ) ) ;
        
        OutputStream out = null;
        
        try{
            
            response.setContentType( "application/vnd.ms-excel" ) ;
            response.setHeader( "Content-disposition", "attachment; filename=\"Reporte_1.xls\"" ) ;
            response.setHeader( "Content-type", "application/vnd.ms-excel" ) ;
            
            //ini:formato
            WritableFont cabeceraFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, true);
            WritableFont cuerpoFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false);
            WritableFont domicilioFont = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false); 

            WritableCellFormat fCabecera = new WritableCellFormat(cabeceraFont);
            fCabecera.setAlignment(Alignment.JUSTIFY);
            fCabecera.setVerticalAlignment(VerticalAlignment.CENTRE);
            fCabecera.setBackground(Colour.CORAL);
            fCabecera.setBorder(Border.ALL,BorderLineStyle.THIN);

            WritableCellFormat fCuerpo = new WritableCellFormat(cuerpoFont);
            fCuerpo.setAlignment(Alignment.LEFT);
            fCuerpo.setBorder(Border.ALL,BorderLineStyle.THIN);

            WritableCellFormat fCuerpo2 = new WritableCellFormat(domicilioFont);
            fCuerpo2.setAlignment(Alignment.LEFT);
            fCuerpo2.setBorder(Border.ALL,BorderLineStyle.THIN);
            
            //fin:formato
    
            WritableWorkbook w = Workbook.createWorkbook(response.getOutputStream());
            WritableSheet s = w.createSheet("Informe", 0); //Nombre de hoja
            
            s.setColumnView(0,10);//ini:seteamos el ancho de las columnas 
            s.setColumnView(1,20);
            s.setColumnView(2,20);
            s.setColumnView(3,20);
            s.setColumnView(4,25);
            s.setColumnView(5,10);
            s.setColumnView(6,15);
            s.setColumnView(7,15);
            s.setColumnView(8,10);
            s.setColumnView(9,10);
            s.setColumnView(10,30);
            s.setColumnView(11,20);
            s.setColumnView(12,20);
            
            //ini: armando el excel
            s.addCell(new Label(0, 0, "BC",fCabecera)); //añadiendo celdas
            s.addCell(new Label(1, 0, "PAÍS",fCabecera)); //añadiendo celdas
            s.addCell(new Label(2, 0, "CUENTA",fCabecera));
            s.addCell(new Label(3, 0, "TIPO DE CAMPAÑA",fCabecera));
            s.addCell(new Label(4, 0, "CAMPAÑA",fCabecera));
            s.addCell(new Label(5, 0, "TIPO DE PRODUCTO",fCabecera));
            s.addCell(new Label(6, 0, "PRODUCTO",fCabecera));
            s.addCell(new Label(7, 0, "ASSET",fCabecera));
            s.addCell(new Label(8, 0, "# PAQUETES",fCabecera));
            s.addCell(new Label(9, 0, "Tipo",fCabecera));
            s.addCell(new Label(10, 0, "Fondeo",fCabecera));
            s.addCell(new Label(11, 0, "ROI",fCabecera));
            s.addCell(new Label(12, 0, "GDV",fCabecera));
            s.addCell(new Label(13, 0, "TARJETAS",fCabecera));
            s.addCell(new Label(14, 0, "REVENUE",fCabecera));
            s.addCell(new Label(15, 0, "RESULTADO",fCabecera));
            s.addCell(new Label(16, 0, "PARTNER LAVERAGE",fCabecera));
            
            int j = 0 ;
            for( int i = 0 ; i < f.getPaises( ).length ; i ++ ){
                int res = f.getResultados( )[ i ].intValue( ) ;
                
                s.addCell( new Number( 0, i + 1, f.getBc( )[ i ],fCuerpo ) ) ;
                s.addCell( new Label( 1, i + 1, MCUtil.TextoFormateado( f.getPaises( )[ i ] ),fCuerpo ) ) ;
                s.addCell( new Label( 2, i + 1, MCUtil.TextoFormateado( f.getCuentas( )[ i ]),fCuerpo ) ) ;
                s.addCell( new Label( 3, i + 1, MCUtil.TextoFormateado( f.getTiposCampanias( )[ i ] ),fCuerpo ) );
                s.addCell( new Label( 4, i + 1, MCUtil.TextoFormateado( f.getCampanias( )[ i ] ),fCuerpo ) ) ;
                s.addCell( new Label( 5, i + 1, MCUtil.TextoFormateado( f.getTiposProducto( )[ i ] ),fCuerpo ) ) ;
                s.addCell( new Label( 6, i + 1, MCUtil.TextoFormateado( f.getProductos( )[ i ] ),fCuerpo ) ) ;
                s.addCell( new Label( 7, i + 1, MCUtil.TextoFormateado( f.getAssets( )[ i ] ),fCuerpo ) ) ;
                s.addCell( new Number( 8, i + 1, f.getPaquetes( )[ i ],fCuerpo ) ) ;
                s.addCell( new Label( 9, i + 1, ""+f.getTipoPaquete( )[ i ],fCuerpo ) ) ;
                s.addCell( new Label( 10, i + 1, ""+f.getFondeado( )[ i ],fCuerpo ) ) ;
                s.addCell( new Label( 11, i + 1, ""+f.getRois( )[ i ],fCuerpo ) ) ;
                s.addCell( new Label( 12, i + 1, ""+f.getGdvs( )[ i ],fCuerpo ) ) ;
                s.addCell( new Label( 13, i + 1, ""+f.getTarjetas( )[ i ],fCuerpo ) ) ;
                s.addCell( new Label( 14, i + 1, ""+f.getRevenues( )[ i ],fCuerpo2 ) ) ;
                s.addCell( new Number( 15, i + 1, res,fCuerpo2 ) ) ;
                s.addCell( new Number( 16, i + 1, f.getpLaverages( )[ i ],fCuerpo2 ) ) ;
                                
                j = i + 1 ;
            }
            
            s.addCell( new Label( 0, j + 1, "TOTALES",fCabecera ) ) ;
            
            s.addCell( new Label( 0, j + 2, " ",fCuerpo ) ) ;
            s.addCell( new Number( 1, j + 2, f.getNumPaisesT( ),fCuerpo ) ) ;
            s.addCell( new Number( 2, j + 2, f.getNumCuentasT( ),fCuerpo ) ) ;
            s.addCell( new Label( 3, j + 2, " ",fCuerpo ) ) ;
            s.addCell( new Number( 4, j + 2, f.getNumCampaniasT( ),fCuerpo ) ) ;
            s.addCell( new Label( 5, j + 2, " ",fCuerpo ) ) ;
            s.addCell( new Number( 6, j + 2, f.getNumProductosT( ),fCuerpo ) ) ;
            s.addCell( new Number( 7, j + 2, f.getNumAssetsT( ),fCuerpo ) ) ;
            s.addCell( new Label( 8, j + 2, " ",fCuerpo ) ) ;
            s.addCell( new Label( 9, j + 2, " ",fCuerpo ) ) ;
            s.addCell( new Label( 10, j + 2, " ",fCuerpo ) ) ;
            s.addCell( new Label( 11, j + 2, " "+f.getTotalROIT( ),fCuerpo ) ) ;            
            s.addCell( new Label( 12, j + 2, " "+f.getTotalGDVT( ),fCuerpo ) ) ;
            s.addCell( new Label( 13, j + 2, " "+f.getTarjT( ),fCuerpo ) ) ;
            s.addCell( new Label( 14, j + 2, " "+f.getTotalREVENUET( ),fCuerpo ) ) ;
            s.addCell( new Label( 15, j + 2, " "+f.getToalRESULTT( ),fCuerpo ) ) ;
            s.addCell( new Label( 16, j + 2, " "+f.getpLaverageT( ),fCuerpo ) ) ;
            
            w.write();
            w.close();

            
        } catch ( Exception e ) {
            e.printStackTrace( ) ;
            out.close( ) ;
        }
        
        return null ;
        
    }
        
}
